﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
using System.Xml;

using PEMS.Common;

namespace PEMS.Server
{
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// <summary>
    /// Ember, akikből származik pl. az Admin, Tanar, Tanulo
    /// </summary>
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////
    [Serializable]
    [XmlInclude(typeof(Admin))]
    [XmlInclude(typeof(Oktato))]
    [XmlInclude(typeof(Hallgato))]
    public abstract class Ember
    {
        #region Properties
        /// <summary>
        /// a felhasználó PEMS id-je
        /// </summary>
        [XmlElement("UserName")]
        public string userName {get;set;}
        /// <summary>
        /// a felhasználó teljes neve
        /// </summary>
        [XmlElement("Teljes neve")]
        public string fullName { get; set; }
        /// <summary>
        /// a felhasználó PEMS jelszava
        /// </summary>
        [XmlElement("Jelszo")]
        public string password { get; set; }
        /// <summary>
        /// a PEMS-ben aktíválva van-e a felhasználó
        /// </summary>
        [XmlElement("Aktiv_allapot")]
        public bool active { get; set; }
        /// <summary>
        /// felhasználó jogosultsága
        /// </summary>
        [XmlElement("Jogosultsag")]
        public UserTypeEnum jogosultsag { get; set; }
        /// <summary>
        /// megjegyzések
        /// </summary>
        [XmlElement("Megjegyzes")]
        public string megjegyzes { get; set; }
        #endregion

        #region Constructors
        /// <summary>
        /// default constructor, a serializálás miatt kell
        /// </summary>
        public Ember()
        
        {

        }
        /// <summary>
        /// konstruktor név, teljes név, jelszo, aktív státusz, jogosultság megadással
        /// </summary>
        /// <param name="username">a felhasználónév</param>
        public Ember(string userName, string fullName, string password, bool active, UserTypeEnum jogosultsag)
        {
            this.userName = userName;
            this.fullName = fullName;
            this.password = password;
            this.active = active;
            this.jogosultsag = jogosultsag;
            megjegyzes = "Létrehozva: " + DateTime.Now.ToString() + "\n";
        }
        #endregion

    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// <summary>
    /// Tanár
    /// </summary>
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////
    [Serializable]
    public class Oktato : Ember
    {

        #region Constructors
        /// <summary>
        /// default constructor, a serializálás miatt kell
        /// </summary>
        public Oktato()
            : base()
        {

        }
        /// <summary>
        /// konstruktor név megadással
        /// </summary>
        /// <param name="usernev">a felhasználónév</param>
        public Oktato(string userName, string fullName, string password, bool active, UserTypeEnum jogosultsag)
            : base(userName, fullName, password, active, jogosultsag)
        {

        }
        #endregion

        #region Properties
        /// <summary>
        /// csak tanárnaknak létező property, teszt célból
        /// </summary>
        [XmlElement("csak_Tanarnak_letezo_prop")]
        public int tanarProprety { get; set; }
        #endregion
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// <summary>
    /// Admin
    /// </summary>
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////
    [Serializable]
    public class Admin : Ember
    {

        #region Constructors
        /// <summary>
        /// default constructor, a serializálás miatt kell
        /// </summary>
        public Admin()
            : base()
        {

        }
        /// <summary>
        /// konstruktor név megadással
        /// </summary>
        /// <param name="usernev">a felhasználónév</param>
        public Admin(string userName, string fullName, string password, bool active, UserTypeEnum jogosultsag)
            : base(userName, fullName, password, active, jogosultsag)
        {

        }
        #endregion

        #region Properties
        /// <summary>
        /// csak adminnak_létező property, teszt célból
        /// </summary>
        [XmlElement("csak_adminnak_letezo_prop")]
        public int adminProprety { get; set; }
        #endregion

        #region Methods


        /// <summary>
        /// tud aktíválni felhasználót
        /// </summary>
        /// <param name="uID">PEMS username, ezt a felhasználót aktíválja</param>
        public void activateUser(string uID)
        {

        }

        #endregion
    }


    ////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// <summary>
    /// Hallgató
    /// </summary>
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////
    [Serializable]
    public class Hallgato : Ember
    {

        #region Constructors
        /// <summary>
        /// default constructor, a serializálás miatt kell
        /// </summary>
        public Hallgato()
            : base()
        {

        }
        /// <summary>
        /// konstruktor név megadással
        /// </summary>
        /// <param name="userName">a felhasználónév</param>
        public Hallgato(string userName, string fullName, string password, bool active, UserTypeEnum jogosultsag)
            : base(userName, fullName, password, active, jogosultsag)
        {

        }
        #endregion

    }

}
